package com.edu.admin.service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.edu.admin.common.BaseService;
import com.edu.admin.entity.SysProduct;
import com.edu.admin.enums.ExceptionEnum;
import com.edu.admin.enums.UseTypeEnum;
import com.edu.admin.exception.SysException;
import com.edu.admin.mapper.ProductMapper;
import com.edu.admin.vo.ProductVo;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;

/**
 * 产品服务
 *
 * @author Wangjiong
 * 
 */
@Transactional
@Service
public class ProductService extends BaseService<ProductMapper, SysProduct> {
	/**
	 * 获取产品列表
	 * 
	 * @param
	 * 
	 * @return List<ProductVo>
	 */
	public List<ProductVo> getProductList() {
		return this.mapper.getProductList();
	}
	
	
	/**
	 * 获取所有产品列表（包括停用产品）
	 * 
	 * @param List<ProductVo>
	 * 
	 * @return
	 */
	public List<ProductVo> getAllProductList(){
		return this.mapper.getAllProductList();
	}
	
	/**
	 * 按学校id获取产品列表
	 * 
	 * @param schoolId
	 * 
	 * @return List<ProductVo>
	 */
	public List<ProductVo> getSelectProductList(Long schoolId) {
		return this.mapper.getSelectProductList(schoolId);
	}
	
	/**
	 * 获取所有产品列表（包括停用产品）(分页)
	 * 
	 * @param pageNum
	 * @param pageSize
	 * 
	 * @return PageInfo<ProductVo>
	 */
	public PageInfo<ProductVo> getAllProductListPage(Integer pageNum, Integer pageSize) {
		
		if (pageNum == null) {
			pageNum = 1;
		}
		if (pageSize == null) {
			pageSize = 10;
		}
		PageHelper.startPage(pageNum, pageSize);
		
		List<ProductVo> productList = this.mapper.getAllProductList();
		
		PageInfo<ProductVo> pageInfo = new PageInfo<ProductVo>(productList);
		
		return pageInfo;
	}
	
	/**
     * 产品重复性检查
     * @param SysProduct product
     * 
     * @return List<ProductVo>
     * @throws Exception
     */
    public List<ProductVo> CheckProduct(SysProduct product) throws Exception {
    	
    	return this.mapper.findProductByProductName(product.getProductId(), product.getProductName().trim());
  
    }
	
	/**
	 * 保存产品
	 * 
	 * @param SysProduct
	 * 
	 * @return Map<String, Object>
	 * @throws Exception 
	 */
	public Map<String, Object> saveProduct(SysProduct product) throws Exception {
		Map<String, Object> result = new HashMap<>();
		
		List<ProductVo> productList = CheckProduct(product);
		
		if (productList!=null && productList.size()>0)
		{
			throw new SysException(ExceptionEnum.PRODUCTNAMEREPEAT);
		}

		Long productId = product.getProductId();

		if (productId == null) {
			
			product.setUseType(UseTypeEnum.ISUSE.getCode());
				
			insert(product);

			productId = product.getProductId();


		} else {
			
			updateByPrimaryKeySelective(product);

		}
		
		result.put("productId", productId);

		return result;

		
	}
	
	/**
	 * 删除产品
	 * 
	 * @param productId
	 * 
	 * @return int
	 */
	public int deleteProduct(Long productId) {
		
		if (productId != null) {
			return this.deleteByPrimaryKey(productId);

		}
		
		return 0;	

	}
	
	/**
	 * 启用停用产品
	 * 
	 * @param productId
	 * @param useType
	 * 
	 * @return int
	 */
	public int useProduct(Long productId,Integer useType) {
		
		if (productId != null) {
			SysProduct product = new SysProduct();
			product.setProductId(productId);
	        product.setUseType(useType);
			return updateByPrimaryKeySelective(product);

		}
		
		return 0;	

	}


}
